INCLUDE = -I/home/mjarvis/include
CC = icpc
CFLAGS = -O3 -wn10 -wd1505 $(INCLUDE)
FC = ifort
FFLAGS = -u -O3 -132 -warn all
BINDIR= .
ODIR= odir

TMVLINK := $(shell cat /home/mjarvis/share/tmv-link)
TMV = $(TMVLINK) 
TMVSB = -ltmv_symband $(TMVLINK) 

SNO=$(ODIR)/sn.o
SN= -L/usr/local/intel/fc/cur/lib -lifcoremt -lifport -lpthread

SMITHPROXY = derek/P3D
SMITHODIR = derek/objs
SMITHO = $(SMITHODIR)/constants.o $(SMITHODIR)/precision.o $(SMITHODIR)/object.o $(SMITHODIR)/misc.o $(SMITHODIR)/interp.o $(SMITHODIR)/diffEq.o $(SMITHODIR)/integration.o $(SMITHODIR)/universe.o $(SMITHODIR)/root.o $(SMITHODIR)/linearPower.o $(SMITHODIR)/fit.o $(SMITHODIR)/PSfits.o $(SMITHODIR)/smithp3d.o
SMITHLIB = -L/home/mjarvis/LAPACK95 -llapack95 -L/usr/local/intel/mkl/cur/lib/32 -lmkl -lguide -lpthread -L/usr/local/intel/fc/cur/lib -lifcore -lifport

all : $(BINDIR)/predcmb $(BINDIR)/binlike $(BINDIR)/pred1 $(BINDIR)/predlike makewwaprior makewwaprior2 makeflatprior $(BINDIR)/predflat wz $(BINDIR)/writepb $(BINDIR)/writemap
 
clean : 
	/bin/rm odir/* derek/P3D derek/objs/*

$(SMITHPROXY) :
	cd derek; make 

$(BINDIR)/writemap: WriteMap.cpp 
	$(CC) $(CFLAGS) WriteMap.cpp $(TMVSB) -lm -o $(BINDIR)/writemap

$(BINDIR)/writepb: WritePB.cpp $(ODIR)/PowerSpectrum.o $(ODIR)/CalcT.o $(SMITHPROXY)
	$(CC) $(CFLAGS) WritePB.cpp  $(ODIR)/PowerSpectrum.o $(ODIR)/CalcT.o $(SNO) $(SMITHO) -lm $(SMITHLIB) -o $(BINDIR)/writepb

makewwaprior: MakeWWaPrior.cpp
	$(CC) $(CFLAGS) MakeWWaPrior.cpp -o makewwaprior

makewwaprior2: MakeWWaPrior2.cpp
	$(CC) $(CFLAGS) MakeWWaPrior2.cpp -o makewwaprior2

makeflatprior: MakeFlatPrior.cpp
	$(CC) $(CFLAGS) MakeFlatPrior.cpp -o makeflatprior

$(BINDIR)/binlike: $(ODIR)/BinLike.o $(SNO) $(SMITHPROXY)
	$(CC) $(CFLAGS) $(ODIR)/BinLike.o $(ODIR)/PowerSpectrum.o $(SNO) $(SN) $(SMITHO) $(ODIR)/CalcT.o $(TMV) $(SMITHLIB) -lm -o $(BINDIR)/binlike 

$(ODIR)/BinLike.o: BinLike.cpp
	$(CC) $(CFLAGS) BinLike.cpp -c -o $(ODIR)/BinLike.o

$(ODIR)/sn.o: sn.f
	$(FC) $(FFLAGS) -c sn.f -o $(ODIR)/sn.o

$(ODIR)/testps.o: testps.cpp 
	$(CC) $(CFLAGS) -c testps.cpp -o $(ODIR)/testps.o 
	
testps: $(ODIR)/testps.o $(SMITHPROXY)
	$(CC) $(CFLAGS) $(ODIR)/testps.o $(SMITHO) -o testps $(SMITHLIB)

$(BINDIR)/pred1: $(ODIR)/Pred1.o $(ODIR)/PowerSpectrum.o $(SMITHPROXY) $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/Pred1.o $(ODIR)/PowerSpectrum.o $(SMITHO) $(ODIR)/CalcT.o $(TMV) -lm -o $(BINDIR)/pred1 $(SMITHLIB)

$(BINDIR)/predmapsqxx: $(ODIR)/PredMapSq.o $(ODIR)/PowerSpectrum.o $(SMITHPROXY) $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/PredMapSq.o $(ODIR)/PowerSpectrum.o $(SMITHO) $(ODIR)/CalcT.o $(TMV) -lm $(SMITHLIB) -o $(BINDIR)/predmapsqxx

$(BINDIR)/predmapsqx: $(ODIR)/PredMapSq.o $(ODIR)/PowerSpectrum.o $(SMITHPROXY) $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/PredMapSq.o $(ODIR)/PowerSpectrum.o $(SMITHO) $(ODIR)/CalcT.o $(TMV) -lm $(SMITHLIB) -o $(BINDIR)/predmapsqx

$(BINDIR)/predmapsq: $(ODIR)/PredMapSq.o $(ODIR)/PowerSpectrum.o $(SMITHPROXY) $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/PredMapSq.o $(ODIR)/PowerSpectrum.o $(SMITHO) $(ODIR)/CalcT.o $(TMV) -lm $(SMITHLIB) -o $(BINDIR)/predmapsq

$(BINDIR)/predflat: $(ODIR)/PredFlat.o $(ODIR)/PowerSpectrum.o $(SMITHPROXY) $(ODIR)/CalcT.o $(SNO)
	$(CC) $(CFLAGS) $(ODIR)/PredFlat.o $(ODIR)/PowerSpectrum.o $(SMITHO) $(ODIR)/CalcT.o $(SNO) $(SN) -lm $(SMITHLIB) $(TMVSB) -o $(BINDIR)/predflat

$(BINDIR)/predcmb: $(ODIR)/PredCMB.o $(ODIR)/PowerSpectrum.o $(SMITHPROXY) $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/PredCMB.o $(ODIR)/PowerSpectrum.o $(SMITHO) $(ODIR)/CalcT.o -lm $(SMITHLIB) -o $(BINDIR)/predcmb

$(BINDIR)/predcmb2: $(ODIR)/PredCMB.o $(ODIR)/PowerSpectrum.o $(SMITHPROXY) $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/PredCMB.o $(ODIR)/PowerSpectrum.o $(SMITHO) $(ODIR)/CalcT.o -lm $(SMITHLIB) -o $(BINDIR)/predcmb2

$(BINDIR)/predlike: $(ODIR)/PredLike.o $(ODIR)/PowerSpectrum.o $(SMITHPROXY) $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/PredLike.o $(ODIR)/PowerSpectrum.o $(SMITHO) $(ODIR)/CalcT.o $(TMV) -lm $(SMITHLIB) -o $(BINDIR)/predlike

$(ODIR)/PredMapSq.o: PredMapSq.cpp PowerSpectrum.h Int.h
	$(CC) $(CFLAGS) -c PredMapSq.cpp -o $(ODIR)/PredMapSq.o

$(ODIR)/PredFlat.o: PredFlat.cpp PowerSpectrum.h
	$(CC) $(CFLAGS) -c PredFlat.cpp -o $(ODIR)/PredFlat.o

$(ODIR)/PredCMB.o: PredCMB.cpp PowerSpectrum.h Int.h
	$(CC) $(CFLAGS) -c PredCMB.cpp -o $(ODIR)/PredCMB.o

$(ODIR)/PredLike.o: PredLike.cpp PowerSpectrum.h Int.h
	$(CC) $(CFLAGS) -c PredLike.cpp -o $(ODIR)/PredLike.o

$(ODIR)/Pred1.o: Pred1.cpp PowerSpectrum.h 
	$(CC) $(CFLAGS) -c Pred1.cpp -o $(ODIR)/Pred1.o

$(ODIR)/TestPS.o: TestPS.cpp PowerSpectrum.h
	$(CC) $(CFLAGS) -c TestPS.cpp -o $(ODIR)/TestPS.o

$(BINDIR)/e3_m3: $(ODIR)/E3_M3.o $(ODIR)/CorrIO.o $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/E3_M3.o $(ODIR)/CorrIO.o $(ODIR)/CalcT.o -lm -o $(BINDIR)/e3_m3

$(BINDIR)/e3m: $(ODIR)/E3m.o $(ODIR)/CorrIO.o $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/E3m.o $(ODIR)/CorrIO.o $(ODIR)/CalcT.o -lm -o $(BINDIR)/e3m

$(BINDIR)/e3: $(ODIR)/E3.o $(ODIR)/CorrIO.o $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/E3.o $(ODIR)/CorrIO.o $(ODIR)/CalcT.o -lm -o $(BINDIR)/e3

$(BINDIR)/e2: $(ODIR)/E2.o $(ODIR)/CorrIO.o $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/E2.o $(ODIR)/CorrIO.o $(ODIR)/CalcT.o -lm -o $(BINDIR)/e2

$(BINDIR)/stare2: $(ODIR)/StarE2.o $(ODIR)/CorrIO.o $(ODIR)/CalcT.o
	$(CC) $(CFLAGS) $(ODIR)/StarE2.o $(ODIR)/CorrIO.o $(ODIR)/CalcT.o -lm -o $(BINDIR)/stare2

wz: $(ODIR)/WZ.o $(SMITHPROXY)
	$(CC) $(CFLAGS) $(ODIR)/WZ.o $(ODIR)/PowerSpectrum.o $(SMITHO) $(ODIR)/CalcT.o $(TMV) -lm $(SMITHLIB) -o wz

$(ODIR)/CalcT.o: CalcT.cpp CalcT.h
	$(CC) $(CFLAGS) -c CalcT.cpp -o $(ODIR)/CalcT.o

$(ODIR)/PowerSpectrum.o: PowerSpectrum.cpp PowerSpectrum.h Save.h Int.h
	$(CC) $(CFLAGS) -c PowerSpectrum.cpp -o $(ODIR)/PowerSpectrum.o

$(ODIR)/BinomFact.o: BinomFact.cpp BinomFact.h
	$(CC) $(CFLAGS) -c BinomFact.cpp -o $(ODIR)/BinomFact.o

$(ODIR)/Bounds.o: Bounds.cpp Bounds.h
	$(CC) $(CFLAGS) -c Bounds.cpp -o $(ODIR)/Bounds.o

$(ODIR)/WZ.o: WZ.cpp 
	$(CC) $(CFLAGS) -c WZ.cpp -o $(ODIR)/WZ.o
